using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;

public class NAID_Editor : EditorWindow {
//
//	public Texture2D lineTexture = null;
//	
//	[System.Serializable]
//	public class NodeWindow
//	{
//		[SerializeField]
//		public Rect rect;
//		
//		[SerializeField]
//		public NAID_Data.NAID_Node node;
//		
//		[SerializeField]
//		public bool start = false;
//		
//		public NodeWindow(Rect r, NAID_Data.NAID_Node n = null, bool s = false)
//		{
//			rect = r;
//			node = n;
//			start = s;
//		}
//	}
//	
//	Vector2 dialogListScroll = Vector2.zero;
//	Vector2 dialogTreeScroll = Vector2.zero;
//	
//	[SerializeField]
//	private List<NodeWindow> windows = new List<NodeWindow>();
//	
//	[SerializeField]
//	private List<NAID_Data> files = new List<NAID_Data>();
//	
//	[SerializeField]
//	private GUIContent[] filePopups = null;
//	
//	[SerializeField]
//	private int filePopupIndex = -1;
//	
//	[SerializeField]
//	private NAID_Data.NodeSet selectedSet = null;
//	
//	[SerializeField]
//	private int lastFocusWindow = -1;
//	
//	[SerializeField]
//	private int createdWindow = -1;
//	
//	private bool linkDragging = false;
//	private bool breakLink = false;
//	private NodeWindow dragWindow = null;
//	
//	private Vector2 mousePos = Vector2.zero;
//	private GUIStyle windowStyle;
//	
//	[MenuItem("NAID/Editor")]
//	public static void InitWindow()
//	{
//		NAID_Editor editor = GetWindow<NAID_Editor>();
//		editor.lineTexture = AssetDatabase.LoadAssetAtPath("Assets/NAID/Editor/Line.png", typeof(Texture2D)) as Texture2D;
//		editor.files.Clear();
//		
//		NAID_Data[] datas = FindObjectsOfTypeIncludingAssets(typeof(NAID_Data)) as NAID_Data[];
//		
//		if(datas != null)
//		{
//			foreach(NAID_Data d in datas)
//				editor.files.Add(d);
//				
//		}
//		
//		editor.Init();
//		
//	}
//	
//	public void Init()
//	{
//		buildFilePopupArray();
//		
//		windowStyle = new GUIStyle(EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).box);
//		windowStyle.padding = new RectOffset(0,0,0,0);
//		windowStyle.contentOffset = new Vector2(-2,0);
//		windowStyle.margin = new RectOffset(0,0,0,0);
//		windowStyle.alignment = TextAnchor.MiddleCenter;
//	}
//	
//	public void buildFilePopupArray()
//	{
//		files.RemoveAll((item) => AssetDatabase.GetAssetPath(item) == "");
//		
//		this.filePopups = new GUIContent[files.Count];
//		
//		for(int i = 0; i<files.Count;i++)
//			this.filePopups[i] = new GUIContent(AssetDatabase.GetAssetPath(files[i]).Substring(7));
//	}
//	
//	Rect getBounds(Rect minRect)
//	{
//		Rect ret = minRect;
//		
//		foreach(NodeWindow win in windows)
//		{
//			if(win.rect.x < ret.x)
//				ret.x = win.rect.x;
//			
//			if(win.rect.y < ret.y)
//				ret.y = win.rect.y;
//			
//			if(win.rect.xMax > ret.xMax)
//				ret.xMax = win.rect.xMax;
//			
//			if(win.rect.yMax > ret.yMax)
//				ret.yMax = win.rect.yMax;
//		}
//		
//		return ret;
//	}
//	
//	void CreateWindows()
//	{
//		lastFocusWindow = -1;
//		windows.Clear();
//		
//		foreach(NAID_Data.NAID_Node n in files[filePopupIndex].nodes)
//		{
//			if(n.nodeSet == selectedSet.id)
//				windows.Add(new NodeWindow(new Rect(n.editorPosition.x, n.editorPosition.y,100,65),n,false));
//		}
//	}
//	
//	int AddWindow(NAID_Data.NAID_Node n)
//	{
//		windows.Add(new NodeWindow(new Rect(n.editorPosition.x, n.editorPosition.y, 100,65), n, false));
//		return windows.Count-1;
//	}
//	
//	public int FocusWindow {get;set;}
//	
//	string CreateDialogName()
//	{
//		NAID_Data d = files[filePopupIndex];
//		int index = 0;
//		string baseName = "newDialog";
//		string currCheck = baseName;
//		bool found = true;
//		
//		
//		while(found)
//		{
//			found = false;
//			foreach(NAID_Data.NodeSet nS in d.nodeSets)
//			{
//				if(nS.id.IndexOf(currCheck) == 0)
//				{
//					index++;
//					currCheck = baseName + index;
//					found = true;
//					break;
//				}
//			}
//		}
//		
//		return currCheck;
//	}
//	
//	void SaveUndo(string name)
//	{
//		if(filePopupIndex >= 0)
//		{
//			Object[] saveObject = new Object[2];
//			saveObject[0] = this;
//			saveObject[1] = files[filePopupIndex];
//			Undo.RegisterUndo(saveObject, name);
//		}
//	}
//	
//	void OnGUI()
//	{
//		TextAnchor oldAlign = GUI.skin.window.alignment;
//		GUI.skin.window.alignment = TextAnchor.UpperLeft;
//		
//		if(Event.current.type == EventType.Repaint && filePopupIndex >= 0 && selectedSet != null)
//			CreateWindows();
//		
//		GUILayout.BeginHorizontal();
//		
//			GUILayout.BeginVertical(GUILayout.Width(200));
//			GUILayout.Space(5);
//		
//				GUILayout.BeginHorizontal();
//		
//					int pI = filePopupIndex;
//					filePopupIndex = EditorGUILayout.Popup(filePopupIndex, filePopups);
//		
//					if(pI != filePopupIndex) {}
//		
//					if(GUILayout.Button("+"))
//					{
//						SaveUndo("Create New Dialog");
//						NAID_Data d = ScriptableObject.CreateInstance<NAID_Data>();
//						AssetDatabase.CreateAsset(d, AssetDatabase.GenerateUniqueAssetPath("Assets/Event Scripts/MyScript.asset"));
//						AssetDatabase.SaveAssets();
//						files.Add(d);
//						buildFilePopupArray();
//					}
//		
//				GUILayout.EndHorizontal();
//			
//				GUILayout.BeginHorizontal();
//		
//					dialogListScroll = GUILayout.BeginScrollView(dialogListScroll, (GUIStyle)"box");
//					
//					if(filePopupIndex >= 0)
//					{
//						foreach(NAID_Data.NodeSet nS in files[filePopupIndex].nodeSets)
//						{
//							if(nS == selectedSet)
//								GUILayout.Label(nS.id, (GUIStyle)"boldLabel");
//							else
//							{
//								if(GUILayout.Button(nS.id, (GUIStyle)"label"))
//								{
//									selectedSet = nS;
//									CreateWindows();
//								}
//							}
//						}
//					}
//					
//					GUILayout.EndScrollView();
//		
//					GUILayout.BeginHorizontal();
//		
//						if(filePopupIndex < 0)
//							GUI.enabled = false;
//						
//						if(GUILayout.Button("+"))
//						{
//							SaveUndo("Creating Dialog...");
//							
//							NAID_Data.NodeSet newSet = new NAID_Data.NodeSet(CreateDialogName());
//							NAID_Data.NAID_Node startNode = new NAID_Data.NAID_Node();
//			
//							startNode.nodeSet = newSet.id;
//							startNode.id = 0;
//							startNode.editorPosition = new Vector2(10,10);
//			
//							files[filePopupIndex].nodeSets.Add(newSet);
//							files[filePopupIndex].nodes.Add(startNode);
//							EditorUtility.SetDirty(files[filePopupIndex]);
//						}
//		
//						if(GUILayout.Button("-"))
//						{
//							SaveUndo("Deleting Dialog...");
//							
//							files[filePopupIndex].nodes.RemoveAll((item) => item.nodeSet == selectedSet.id);
//							files[filePopupIndex].nodeSets.Remove(selectedSet);
//			
//							selectedSet = null;
//							windows.Clear();
//							EditorUtility.SetDirty(files[filePopupIndex]);
//						}
//		
//						if(filePopupIndex < 0)
//							GUI.enabled = false;
//		
//					GUILayout.EndHorizontal();
//		
//				GUILayout.EndHorizontal();
//			
//			GUILayout.Space(5);
//			GUILayout.EndVertical();
//		
//			GUILayout.BeginVertical();
//		
//				
//		
//			GUILayout.EndVertical();
//		
//		GUILayout.EndHorizontal();
//	}
}
